package com.hyfrogx.modules.manage.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hyfrogx.common.param.PayType;
import com.hyfrogx.common.utils.QueryExt;
import com.hyfrogx.modules.app.utils.FrogConstant;
import com.hyfrogx.modules.information.entity.HyInformationOrderEntity;
import com.hyfrogx.modules.manage.dao.payrecord.HyPayRecordDao;
import com.hyfrogx.modules.manage.entity.payrecord.HyPayRecord;
import com.hyfrogx.modules.manage.service.HyPayRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author ：Li9527
 * @date ：Created in 2019-10-16 14:22
 * @description：${description}
 * @modified By：
 * @version: 1.0.0
 */
@Service("HyPayRecordService")
public class HyPayRecordServiceImpl extends ServiceImpl<HyPayRecordDao,HyPayRecord> implements HyPayRecordService {

    @Override
    public List<HyPayRecord> selectPageByConditions(QueryExt query) {
        Map map=new HashMap();
        map.putAll(query.getCondition());
        query.setRecords(this.baseMapper.selectPageByConditions(query,map));
        List<HyPayRecord> list = query.getRecords();
        for (HyPayRecord payRecord : list){
            if (payRecord.getType().intValue() == PayType.channel_gift.getCode()){
                if (payRecord.getUid().toString().equals(query.getCondition().get("uid").toString())){
                    payRecord.setTotal(payRecord.getNum().intValue()*payRecord.getTotal());
                }
                if (payRecord.getYid().toString().equals(query.getCondition().get("uid").toString())){
                    payRecord.setTotal(payRecord.getNum().intValue()*(payRecord.getTotal().intValue()-payRecord.getPercentCoin().intValue()));
                }
            }
            if (payRecord.getType().intValue() == PayType.channel_pay.getCode()){
                if (payRecord.getYid().toString().equals(query.getCondition().get("uid").toString())){
                    payRecord.setTotal((payRecord.getTotal().intValue()-payRecord.getPercentCoin().intValue()));
                }
            }
            if (payRecord.getType().intValue() == PayType.zoom_join_pay.getCode()){
                if (payRecord.getYid().toString().equals(query.getCondition().get("uid").toString())){
                    payRecord.setTotal((payRecord.getTotal().intValue()-payRecord.getPercentCoin().intValue()));
                }
            }
        }
        return list;
    }

  @Override
  public Integer addInformationOrder(HyInformationOrderEntity order) {
    HyPayRecord payRecord = new HyPayRecord();
    payRecord.setCreatedate(new Date());
    payRecord.setTotal(order.getProductPrice());
    payRecord.setMoney(order.getProductPrice());
    payRecord.setNum(0);
    payRecord.setType(PayType.verify_reduce.getCode());
    payRecord.setPercentCoin(0);
    payRecord.setPercent(0f);
    payRecord.setYid(FrogConstant.admin_uid);
    // 扣费者id
    payRecord.setUid(order.getUid());
    return this.baseMapper.insert(payRecord);
  }

    @Override
    public Page findByNewPage(QueryExt query) {
        Map map=new HashMap();
        map.putAll(query.getCondition());
        query.setRecords(this.baseMapper.findByNewPage(query,map));
        List<HyPayRecord> list = query.getRecords();
        for (HyPayRecord payRecord : list){
            if (payRecord.getType().intValue() == PayType.channel_gift.getCode()){
                if (payRecord.getUid().intValue() == (Integer.parseInt(map.get("uid").toString()))){
                    payRecord.setTotal(payRecord.getNum().intValue()*payRecord.getTotal());
                }
                if (payRecord.getYid().intValue() ==  (Integer.parseInt(map.get("uid").toString()))){
                    payRecord.setTotal(payRecord.getNum().intValue()*(payRecord.getTotal().intValue()-payRecord.getPercentCoin().intValue()));
                }
            }
            if (payRecord.getType().intValue() == PayType.channel_pay.getCode()){
                if (payRecord.getYid().intValue() == (Integer.parseInt(map.get("uid").toString()))){
                    payRecord.setTotal((payRecord.getTotal().intValue()-payRecord.getPercentCoin().intValue()));
                }
            }
            if (payRecord.getType().intValue() == PayType.zoom_join_pay.getCode()){
                if (payRecord.getYid().intValue() ==  (Integer.parseInt(map.get("uid").toString()))){
                    payRecord.setTotal((payRecord.getTotal().intValue()-payRecord.getPercentCoin().intValue()));
                }
            }
            if (payRecord.getType().intValue() == PayType.user_trade.getCode()){
                if (payRecord.getYid().intValue() ==(Integer.parseInt(map.get("uid").toString()))){
                    payRecord.setTotal((payRecord.getTotal().intValue()-payRecord.getPercentCoin().intValue()));
                }
            }
//			vod_pay("点播门票", 1),
//			vod_tip("点播打赏", 2),
//			channel_pay("直播门票", 3),
//			channel_gift("直播礼物", 4),
//			charge("充值", 5),
//			free("赠送", 6),
//			vip("购买VIP", 7),
//			zoom("购买专属会议室", 8),
//			zoom_time("购买开会次数", 9),
//			zoom_join_time("购买参会次数", 10),
//			zoom_reserve("预约会议", 11),
//			zoom_join_pay("会议门票", 12),
//			distill_cost("转盘活动消耗", 13),
//			distill_add("转盘活动获取", 14),
//			//2018.2.7新增
//			bandit_cost("老虎机活动消耗", 15),
//			bandit_add("老虎机活动获取", 16),
//			master_add("邀请码邀请用户注册获取", 17),
//			//2018.5.11新增
//			radio_album("购买专辑", 18);
            if (payRecord.getType() == PayType.vod_pay.getCode() || payRecord.getType() == PayType.channel_pay.getCode()){
                payRecord.setResourceName(payRecord.getVideoName());
            }else if(payRecord.getType() == PayType.channel_gift.getCode()){
                payRecord.setResourceName(payRecord.getGiftName());
            }else if(payRecord.getType() == PayType.radio_album.getCode()){
                payRecord.setResourceName(payRecord.getAlbumName());
            }
        }
        query.setRecords(list);
        return query;
    }
}
